/* (C)oded by ESPRIT 2014 - 3B2 - Undrained Group*/ /* Par: Khouni Nouha */

#include "gestion_parcours.h"
#include "dessiner.h"
#include "configuration.h"





void modifier_parcours_gtk(parcours_db parcours[],parcours_db m, int id, int n, char msg[])
{
	int choix;
	
	int i = -1;
	
	i = recherche_capteur(parcours,id,n);
	if ( i != -1 )
	{    
		parcours[i] = m;
		strcpy(msg,"le parcours est modifié");
		exporter_parcours(parcours,n);
	}
	else
	{
		strcpy(msg,"le capteur n'existe pas");
	}
    
}

void supprimer_parcours_gtk (parcours_db parcours[],char id[],int  *n, char msg[])
{
	int pos = -1;
	int k = 0;
	while (( pos == -1) && ( k < *n ))
	{
		 if (strcmp(parcours[k].m_id,id) == 0 )
			pos = k;
		else
			k++;
	}
	if ( pos == -1 )
		strcpy(msg,"Le capteur n'existe pas");
	else
	{
		for ( k = pos;k<=*n;k++)
		{
			parcours[k] = parcours[k+1];
		}
		*n = *n-1;
		strcpy(msg,"Le capteur est supprime");
	}
}


void init_parcours_db_gtk(parcours_db parcours[], int *n, char msg[])
{
        int k;
		k = *n-1;
		char smsg[50];

        while ( k > -1)
        {
			sprintf(smsg,"[!] Suppression du capteur '%s'\n",parcours[k].m_id);
			supprimer_capteur(parcours,parcours[k].m_id,n);
			k = *n - 1;
			strcpy(msg,smsg);
		}
		strcpy(msg,"Le liste est vide\n");
		remove(FICHIER_PARCOURS);
}

void crypter_desc(char chaine[])
{
        int i;
        int n;

	n = strlen(chaine);
        for ( i = 0 ; i < n-1; i++)
        {
               	if (chaine[i] == ' ')
                {
                        chaine[i] = '_';
               	}
        }
}

void exporter_parcours(parcours_db p[], int n) // Enregistrer les donner du tableau de strucutre parcours_db dans le fichier FICHIER_PARCOURS
{
	int i = 0;
	FILE *f;

	debug("Exportation du parcours");
	debug("le nombre des capteurs a exporter : %d",n);
	remove(FICHIER_PARCOURS);
    f = fopen(FICHIER_PARCOURS,"w");

    if ( f != NULL)
		{
			for ( i = 0; i < n ; i++)
			{
				debug("Exportation du capteur '%s'",p[i].m_id);
				crypter_desc(p[i].desc);
				fprintf(f,"%s %s\n",p[i].m_id,p[i].desc);
			}
        fclose(f);
		}
		else
			debug("Impossible d'ajouter '%s'",p[i].m_id);

	debug("Exportation fini");
}

void extraire_parcours(parcours_db p[], int *n) // Extraire des donnees du fichier "parcours.txt" et mettre les donner dans un tableau de structure parcours_db
{
        FILE *f;
	f = fopen(FICHIER_PARCOURS,"r");
        if ( f != NULL)
        {
                debug("Chargement des capteurs du parcours");
                while ( fscanf(f,"%s %s",p[*n].m_id,p[*n].desc) != EOF)
                {
                        debug("'%s' est charge",p[*n].m_id);
                        *n = *n + 1;
                }
                fclose(f);
        }
	else
             debug("Impossible de charger les capteurs du parcours");

}

void decrypter_desc(char chaine[])
{
	int i;
	int n;

	n = strlen(chaine);
	for ( i = 0 ; i < n-1; i++)
	{
		if (chaine[i] == '_')
		{
			chaine[i] = ' ';
		}
	}
}


void afficher_parcours_asuivre(parcours_db parcours[], int n)
{
	int i ;
	printf("[!] le nombre des capteurs: %d\n",n);
	if ( n <= 0)
		printf("[!] La liste est vide\n");
	else
	{
		dessiner_ligne(77);
		printf("|");
		dessiner_colonne_d(5,"ID");
		dessiner_colonne_d(70,"Description");
		printf("\n");
		dessiner_ligne(77);

		for (i=0;i<n;i++)
		{
			printf("|");
			dessiner_colonne_d(5,"%s",parcours[i].m_id);
			decrypter_desc(parcours[i].desc);
			dessiner_colonne_d(70,"%s",parcours[i].desc);
			printf("\n");
		}
		dessiner_ligne(77);
	}
}

void ajouter_capteur(parcours_db parcours[], int *n)
{
	printf("	[+] Entrez le nouveau capteur: ");
	scanf( "%s",parcours[*n].m_id);
	printf("	[+] Entrez la description du capteur ( utilisez '_' au lieu des espaces ): ");
	scanf("%s",parcours[*n].desc);
	*n=*n+1;
	exporter_parcours(parcours, *n);
}

void ajouter_capteur_gtk(parcours_db parcours[],parcours_db m, int *n)
{
        printf("[!] Ajout d'un produit\n");
        parcours[*n] = m;
        printf("[!] Produit ajoute\n");
        *n = *n + 1;
}

void supprimer_capteur(parcours_db parcours[], char id[], int *n)
{
       int pos = -1;
       int k = 0;

        while (( pos == -1) && ( k < *n ))
        {
                if (strcmp(parcours[k].m_id,id) == 0 )
                {
                        pos = k;
                }
                else
                        k++;
        }
        if ( pos == -1 )
                printf("[!] le capteur n'existe pas\n");
        else
        {
                for ( k = pos;k<=*n;k++)
                {
                        parcours[k] = parcours[k+1];
                }
                *n = *n-1;
                printf("[!] le capteur est supprime\n");
        }
	exporter_parcours(parcours, *n);
}

void init_parcours_db(parcours_db parcours[], int *n)
{
        int k;
	k = *n-1;
        while ( k > -1)
        {
                printf("[!] Suppression du capteur %s: \n",parcours[k].m_id);
                supprimer_capteur(parcours, parcours[k].m_id, n);
		k = *n - 1;
        }
        printf("[!] Parcours initialiser\n");
        remove(FICHIER_PARCOURS);
}

void parcours_par_default(parcours_db parcours[], int *n)
{
    char choix[1];
    do
    {
        printf("[!] Vous voulez inserez le parcours par default ?(o/n) : ");
	fflush(stdin);
        scanf("%s",&choix);
    }
	while ( (strcmp(choix,"o") != 0 ) && (strcmp(choix,"n") != 0)) ;

    if ( strcmp(choix,"o") == 0 )
        {
            init_parcours_db(parcours,n);
            printf("[!] Ajout des capteurs\n");

			strcpy(parcours[*n].m_id,"E01"); strcpy(parcours[*n].desc,"Entree_a_la_zone_d'isolation_active");*n = *n+ 1;
			strcpy(parcours[*n].m_id,"C01"); strcpy(parcours[*n].desc,"Vetements_de_protection_+_Chaussures_habille");*n = *n+ 1;
			strcpy(parcours[*n].m_id,"S01"); strcpy(parcours[*n].desc,"Sortie_de_la_zone_d'isolation_active");*n = *n+ 1;
			strcpy(parcours[*n].m_id,"L01"); strcpy(parcours[*n].desc,"Premier_lavage_des_mains");*n = *n+ 1;
			strcpy(parcours[*n].m_id,"L02"); strcpy(parcours[*n].desc,"Lavage_des_mains_effectue_durant_5_minutes_active");*n = *n+ 1;
			strcpy(parcours[*n].m_id,"C02"); strcpy(parcours[*n].desc,"Vetements_de_protection_+_Chaussures_deshabille");*n = *n+ 1;
			strcpy(parcours[*n].m_id,"V01"); strcpy(parcours[*n].desc,"passage_via_la_cuve_d'eau_+_Chlore_effectue");*n = *n+ 1;
			strcpy(parcours[*n].m_id,"I01"); strcpy(parcours[*n].desc,"Incineration_totale_des_vetements_et_des_chaussures");*n = *n+ 1;
			strcpy(parcours[*n].m_id,"D01"); strcpy(parcours[*n].desc,"Douche_moyennant_une_solution_d'eau_et_du_chlore_effectue");*n = *n+ 1;
			strcpy(parcours[*n].m_id,"B01"); strcpy(parcours[*n].desc,"Entree_a_la_zone_des_bureaux");*n = *n+ 1;
			strcpy(parcours[*n].m_id,"M01"); strcpy(parcours[*n].desc,"Entree_a_la_zone_des_magazins");*n = *n+ 1;
			//strcpy(parcours[*n].m_id,"Sout"); strcpy(parcours[*n].desc,"Sortie_de_la_clinique");*n = *n+ 1;
			//strcpy(parcours[*n].m_id,"Pout"); strcpy(parcours[*n].desc,"Alarme_de_sortie_a_travers_la_barriere_de_la_clinique");*n = *n+ 1;
			//strcpy(parcours[*n].m_id,"Ebola"); strcpy(parcours[*n].desc,"Camera_thermique_detecte_un_individus_probablement_atteint_de_l'ebola");*n = *n+ 1;


            printf("[!] Parcours par default est insere\n");
            exporter_parcours(parcours, *n);
        }

}

void affiche_choix_modification_parcours(char variable[])
{
	dessiner_ligne(46);
        dessiner_milieu(46,"1/ Modifier le nom du capteur %s",variable);
	printf("\n");
        dessiner_milieu(46,"2/ Modifier la description du capteur %s",variable);
        printf("\n");
	dessiner_milieu(46,"0/ Retour");
	printf("\n");
	dessiner_ligne(46);
}

int recherche_capteur(parcours_db parcours[], char id[], int n)
{
	int pos,k;
	pos = -1;
	k = 0;
	while (( pos == -1) && ( k < n ))
	{
		if (strcmp(parcours[k].m_id,id ) == 0)
			pos = k;
		else
			k++;
	}
	if ( pos == -1 )
		printf("[!] Le capteur n'existe pas\n");
	return pos;
}

void modifier_parcours(parcours_db parcours[],  int *n)
{
	int choix;
	char id[5];
	affiche_choix_modification_parcours("parcours");
	printf("> ");
	scanf("%d",&choix);

	int i = -1;
	afficher_parcours_asuivre(parcours,*n);
        printf("[!] Entrez l'ID: ");
        scanf("%s",id);
	i = recherche_capteur(parcours,id,*n);
	switch (choix) {
		case 1: {printf("		[+] Vous avez choisi de modifier le nom du capteur: ");
			fflush(stdin);
			scanf("%s",parcours[i].m_id);}
		break;		

		case 2: {printf("		[+] Vous avez choisi de modifier la description du capteur: ");
			fflush(stdin);
			scanf("%s",parcours[i].desc);}
		break;		
		case 0: {}
		break;

		default: {printf("\nmauvais choix");} 
	}
}
